import {reqGetCode, reqUserRegister, reqUserLogin, reqUserInfo, reqLogout } from "@/api";
import {setToken, getToken, removeToken} from "@/utils/token";
//search模块的小仓库
//state:仓库存储数据的地方
const state = {
    code: '',
    token:getToken(),
    userInfo:{}
};
//mutations:修改state的唯一手段
const mutations = {
    GETCODE(state, code){
        state.code = code
    },
    USERLOGIN(state,token){
        state.token = token
    },
    GETUSERINFO(state, userInfo){
        state.userInfo = userInfo
    },
    CLEAR(state){
        //把仓库中相关用户信息清空
        state.token=''
        state.userInfo={}
        removeToken()
    }
};
//action:处理action, 可以书写自己的业务逻辑，也可以处理异步
const actions = {
    //获取验证码
    async getCode({commit}, phone){
        let result = await reqGetCode(phone)
        if(result.code===200){
            commit("GETCODE", result.data)
            return 'ok'
            // console.log(result)
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    //用户注册
    async userRegister({commit},user){
        let result = await reqUserRegister(user)
        if(result.code === 200){
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    //用户登录[token]
    async userLogin({commit},data){
        let result = await reqUserLogin(data)
        //服务器下发token,用户唯一标识符（uuid）
        //将来经常通过带token 找服务器要用户信息进行展示
        if(result.code==200){
            //用户已经登陆成功并获取带token
            commit("USERLOGIN", result.data.token)
            //持久化存储token
            setToken(result.data.token)
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    //获取用户信息
    async getUserInfo({commit}){
        let result = await reqUserInfo()
        if(result.code==200){
            //提交用户的信息
            commit("GETUSERINFO",result.data)
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    //退出登录
    async userLogout({commit}){
        //只是向服务器发起请求，通知服务器清除token
       let result  = await reqLogout()
        //action里面不能操作states 提交mutation修改state
        if(result.code==200){
            commit("CLEAR")
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    }

};
//getters:理解为计算属性，用于简化仓库数据，让组件获取仓库的数据更加方便
//可以把将来在组件当中需要用的数据简化一下
const getters = {

};
//对外暴露Store类的一个实例
export default {
    state,
    mutations,
    actions,
    getters
}